// 剩余参数
// 必要参数,默认参数和可选参数有个共同点: 
// 他们表示某一个参数
// 有时,你想同时操作多个参数,
// 或者你并不知道会有多好参数传递进来
// 或者里并不知道会有多少个参数传递进来
// 在javascript里,
// 你可以使用arguments来访问所有的参数
// 在Typescript里 你可以把所有参数收集到一个变量里:
// 和ES6的reset一个道理
function buildName(firstName, lastName) {
    var restName = [];
    for (var _i = 2; _i < arguments.length; _i++) {
        restName[_i - 2] = arguments[_i];
    }
    return firstName + " " + lastName + restName.join(" ");
}
var result3 = buildName("windows", "Mac OS", "Linux", "Deepin"); // right 刚刚好
// console.log(result3);
// 剩余的参数会被当作个数不限的可选参数, 可以一个都没有,同样也可以有任意个
// 编译器创建参数数组, 名字实例在省略号(...)后迷茫给定的名字,
// 你可以在函数体内使用这个数组
// this
// 在javascript里,this的值有两大类确定逻辑:
// 在不同函数内, this的值指的就是调用该函数的对象
// 在箭头函数内, this的值指的就是定义改函数时所在的环境对象
// typescript 沿袭了ES6的设计
var deck = {
    suits: ['header', 'spades', 'clubs', 'diamons'],
    cards: Array(52),
    createCardPicker: function () {
        var _this = this;
        return function () {
            var pickedCard = Math.floor(Math.random() * 52);
            var pickSuit = Math.floor(pickedCard / 13);
            return { suit: _this.suits[pickedCard], card: pickedCard % 13 };
        };
    }
};
var cardPicker = deck.createCardPicker();
var pickedCard = cardPicker();
alert("card:" + pickedCard.card + "of" + pickedCard.suit);
